﻿package com.bizmlib.utils
{
	
	public function substituteStringTemplate(str:String, ... rest):String
	{
		var re:RegExp = /(@\d+)\D?/;
		
		function parseString(str:String, re:RegExp):Array
		{
			var res:Array = new Array();
			var index0:int;
			var reRes:Object;
			
			if((index0 = str.indexOf("@@", 0))>-1)
			{
				if(index0 > 0)
				{
					res = parseString(str.substr(0, index0), re);
				}
				res.push("@");
				if(index0 + 2 < str.length)
				{
					res = res.concat(parseString(str.substr(index0 + 2), re));
				}
				
				return res;
			}
			if((reRes = re.exec(str)))
			{
				if(reRes.index > 0)
				{
					res.push(str.substr(0, reRes.index));
				}
				res.push(Number(String(reRes[1]).substr(1)));
				res = res.concat(parseString(str.substr(reRes.index + String(reRes[1]).length), re));
			}
			else
			{
				res.push(str);
			}
			
			return res;
		}
		
		var arr:Array = parseString(str, re);
		for(var i:Number=0; i<arr.length; i++)
		{
			if(arr[i] is Number)
			{
				var parameterIndex:Number = isNaN(arr[i]) ? Number.POSITIVE_INFINITY : (arr[i] - 1);
				arr[i] = ((rest.length > parameterIndex) ? String(rest[parameterIndex]) : null) || "";
			}
		}
		
		return arr.join("");
	}
}